package org.apli.haiam.admin.jsf.managed;

import com.apli.controladores.AplinfoFactoryBean;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;
import org.apli.haiam.admin.entidades.UsuarioAdmin;
import org.apli.haiam.ejb.entidades.AdmMedico;
import org.apli.haiam.ejb.entidades.AdmTipoConsulta;
import org.apli.haiam.ejb.entidades.CexAgenda;
import org.apli.haiam.ejb.entidades.CexDia;
import org.apli.haiam.ejb.entidades.CexEspecialidadMedico;
import org.apli.haiam.ejb.entidades.CexHorario;
import org.apli.haiam.ejb.entidades.CexHorariosDia;
import org.apli.haiam.ejb.interfaces.AdministradorHaiam;
import org.apli.haiam.ejb.interfaces.ConsExternaAdministrador;
import org.apli.jsf.managed.JsfBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Clase backing Bean que administra la entidad CexHorario.
 * <p>
 * <H6>Soporte:HAIAM
 * <I>david_s_1086@hotmail.com,david.carranza@haiam.gob.ec</I></H6>
 *
 * @author david Carranza
 * @version 1.0 30/07/2014
 */
@ManagedBean
@ViewScoped
public class JsfHorario extends JsfBean<CexHorario> {

    final Logger log = LoggerFactory.getLogger(JsfHorario.class);
    private CexEspecialidadMedico especialidad;
    private Integer porcentajeAgenda;
    private AdmMedico cexMedico;
    private Integer medId;
    private List<CexHorariosDia> listaHorarioDia;
    private List<CexHorariosDia> listaHorarioDiaPop;
    private List<CexDia> listaDias;
    private CexHorario cexHorario;
    private CexDia domingo;
    private CexDia lunes;
    private CexDia martes;
    private CexDia miercoles;
    private CexDia jueves;
    private CexDia viernes;
    private CexDia sabado;
    private List<CexHorario> listaHorario;
    private ConsExternaAdministrador hcAdmin;
    private Integer tipoHorario;
    private Integer porcentajeGen;
    private boolean isBtnActivo;
    private boolean isBtnGrabar;
    private AdmTipoConsulta admTipoConsulta;
    private Date fechaInicio;
    private Date fechaFin;
    private CexHorario objHor;
    private static final String TIPO_REPORTE_PDF = "application/pdf";
    private static final String TIPO_REPORTE_EXC = "application/vnd.ms-excel";
    private static final String NAME_REPORTE = "RPT_HORARIO_MEDICO.jasper";
    private static final String NAME_INSTITUTION = "HOSPITAN GENERAL ENRIQUE GARCES";
    private static final String NAME_SERVICE = "DEPARTAMENTO DE ESTADISTICA";
    private static final String DIR_LOGO = "imgMsp.jpg";

    // private AdmSistema sistemaSeleccionado;
    /**
     * Constructor por defecto.
     */
    public JsfHorario() {
        // sistemaSeleccionado = new AdmSistema();
    }
    //Inyectar otro managed bean de reportes

    /**
     * Inicializa los datos miembros.
     */
    @Override
    protected void inicializar() {

        object = new CexHorario();
        porcentajeAgenda = 0;
        cexMedico = new AdmMedico();
        medId = 0;
        listaHorarioDia = new ArrayList<>();
        listaHorario = new ArrayList<>();
        tipoHorario = 1;
        porcentajeGen = 0;
        listaHorarioDiaPop = new ArrayList<>();
        cexHorario = new CexHorario();
        isBtnActivo = true;
        admTipoConsulta = new AdmTipoConsulta();
        porcentajeAgenda = 0;
        isBtnGrabar = false;
        fechaInicio = new Date();
        fechaFin = new Date();
        objHor = new CexHorario();
        try {
            //Saca la lista de los dias de la semana
            listaDias = adminObject.listar(CexDia.class);
            for (CexDia cexDia : listaDias) {
                if (cexDia.getCdiId().equals(1)) {
                    domingo = cexDia;
                    continue;
                }
                if (cexDia.getCdiId().equals(2)) {
                    lunes = cexDia;
                    continue;
                }
                if (cexDia.getCdiId().equals(3)) {
                    martes = cexDia;
                    continue;
                }
                if (cexDia.getCdiId().equals(4)) {
                    miercoles = cexDia;
                    continue;
                }
                if (cexDia.getCdiId().equals(5)) {
                    jueves = cexDia;
                    continue;
                }
                if (cexDia.getCdiId().equals(6)) {
                    viernes = cexDia;
                    continue;
                }
                if (cexDia.getCdiId().equals(7)) {
                    sabado = cexDia;
                }
            }
        } catch (Exception e) {
            log.error("ListarDias" + "() {} ", e.getMessage());
        }

        //cargarListaHorarioListener();
        // cargarListaMedico();
    }

    /**
     * Iyección de dependencia para conectarse al EJB(Lógica de Negocio)
     * Iyección de dependencia para el sistema de Administarción. Iyección de
     * dependencia para el sistema de Emergencia.
     */
    @Override
    protected void cargarEjb() {
        String nombreMetodo = Thread.currentThread().getStackTrace()[1].getMethodName() + "()";
        //super.cargarEjb();
        if (hcAdmin == null) {
            String ejbPath = null;
            try {
                ResourceBundle property = getProperties();
                String ORBContext = property.getString("ORBContext");
                String ejbContextPath = property.getString("ejb.context.path.ConsExterna");
                ejbPath = ORBContext + ejbContextPath + "/ConsExternaAdministradorBean";
                hcAdmin = (ConsExternaAdministrador) AplinfoFactoryBean.lookupBean(ejbPath, false);
            } catch (Exception e) {
                log.error("cargarEjb() {} - {} ", ejbPath, e.getMessage());
            }

        }
        if (adminObject == null) {
            String ejbPath = null;
            try {
                ResourceBundle property = getProperties();
                String ORBContext = property.getString("ORBContext");
                String ejbContextPath = property.getString("ejb.context.path.admin");
                ejbPath = ORBContext + ejbContextPath + "/AdministradorBeanHaiam";
                adminObject = (AdministradorHaiam) AplinfoFactoryBean.lookupBean(ejbPath, false);
            } catch (Exception e) {
                log.error("{}: {} - {} ", new Object[]{nombreMetodo, ejbPath, e});
            }
        }
    }

    /**
     * Graba el registro asociado al objeto que se administra en la página.
     *
     * @return null, se mantiene en la página invocada.
     */
    @Override
    public String grabarAction() {
        FacesContext context = FacesContext.getCurrentInstance();
        boolean act = true;
        int cont = 0;
        boolean isVer = false;
        try {

            //Graba en el caso de hacer un horario individual
            if (tipoHorario.equals(1)) {

                //Valida que al menos tenga un dia asignado en el horario
                for (CexHorario cexHorarioV : listaHorario) {
                    // recorrer lalista de horarioDia
                    for (CexHorariosDia cexHorDiaTempV : cexHorarioV.getCexHorariosDiaList()) {
                        if ((cexHorDiaTempV.getChdHoraInicioAm() != null && cexHorDiaTempV.getChdHoraFinAm() != null)
                                || ((cexHorDiaTempV.getChdHoraInicioAm() != null && cexHorDiaTempV.getChdHoraFinAm() == null) || (cexHorDiaTempV.getChdHoraInicioAm() == null && cexHorDiaTempV.getChdHoraFinAm() != null))) {
                            isVer = true;
                        }
                    }
                }

                if (!isVer) {
                    FacesContext.getCurrentInstance().addMessage(findComponent(context.getViewRoot(), "formDatos").getClientId(), new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se encuentra asignado horario", "Verifique que al menos un dia tenga asignado hora inicio y hora fin"));
                    return null;
                }

                for (CexHorario cexHorTem : listaHorario) {
                    // recorrer lalista de horarioDia
////////////                    for (CexHorariosDia cexHorDiaTemp : cexHorTem.getCexHorariosDiaList()) {
////////////                        //Validad que la hora de inicio sea menor a la hora fin
////////////                        if ((cexHorDiaTemp.getChdHoraInicioAm() != null && cexHorDiaTemp.getChdHoraFinAm() != null) && (cexHorDiaTemp.getChdHoraInicioAm().after(cexHorDiaTemp.getChdHoraFinAm()))) {
////////////                            FacesContext.getCurrentInstance().addMessage(findComponent(context.getViewRoot(), "formDatos").getClientId(), new FacesMessage(FacesMessage.SEVERITY_ERROR, "Horario incorrecto", "Verifique que la hora de inicio sea menor a la hora fin"));
////////////                            act = false;
////////////                            break;
////////////                        }
////////////
////////////                        //Validar la secuencia de los horarios creadas
////////////                        if (listaHorario.size() >= cont + 2) {
////////////                            CexHorario listTm = listaHorario.get(cont + 1);
////////////                            //recorre la lista siguiente para verificar los horarios
////////////                            for (CexHorariosDia objDiaHor : listTm.getCexHorariosDiaList()) {
////////////                                //Selecciona el dia igual al que viene del for principal
////////////                                if (cexHorDiaTemp.getCexDia().equals(objDiaHor.getCexDia())) {
////////////                                    //Verificar Si los horarios son diferentes de null
////////////                                    if ((cexHorDiaTemp.getChdHoraInicioAm() != null && cexHorDiaTemp.getChdHoraFinAm() != null)
////////////                                            && (objDiaHor.getChdHoraInicioAm() != null && objDiaHor.getChdHoraFinAm() != null)) {
////////////                                        //Valida los horarios correctos de los dos horarios
////////////                                        if ((cexHorDiaTemp.getChdHoraInicioAm().after(objDiaHor.getChdHoraInicioAm()) || (cexHorDiaTemp.getChdHoraInicioAm().after(objDiaHor.getChdHoraFinAm())))
////////////                                                || ((cexHorDiaTemp.getChdHoraFinAm().after(objDiaHor.getChdHoraInicioAm())) || (cexHorDiaTemp.getChdHoraFinAm().after(objDiaHor.getChdHoraFinAm())))) {
////////////                                            FacesContext.getCurrentInstance().addMessage(findComponent(context.getViewRoot(), "formDatos").getClientId(), new FacesMessage(FacesMessage.SEVERITY_ERROR, "Horario incorrecto", "Verifique la secuenciam de horas del día " + cexHorDiaTemp.getCexDia().getCdiNombre()));
////////////                                            act = false;
////////////                                            break;
////////////                                        }
////////////                                    } else {
////////////                                        //Verificar Si el horario antecesor es null
////////////                                        if ((cexHorDiaTemp.getChdHoraInicioAm() == null && cexHorDiaTemp.getChdHoraFinAm() == null)
////////////                                                && (objDiaHor.getChdHoraInicioAm() != null && objDiaHor.getChdHoraFinAm() != null)) {
////////////                                            FacesContext.getCurrentInstance().addMessage(findComponent(context.getViewRoot(), "formDatos").getClientId(), new FacesMessage(FacesMessage.SEVERITY_ERROR, "Horario incorrecto", "Horario no puede ser null si esta seguido de otro horario " + cexHorDiaTemp.getCexDia().getCdiNombre()));
////////////                                            act = false;
////////////                                            break;
////////////                                        }
////////////                                    }
////////////                                }
////////////                            }
////////////                        }
////////////                    }
                    //Graba si no existen errores en los horarios
////////////                    if (act) {
                    cexHorTem.setChoPorcentajeAgenda(porcentajeAgenda);
                    if (cexHorTem.getChoId() == null) {
                        cexHorTem.setAdmTipoConsulta(admTipoConsulta);
                        cexHorTem.setCexEspecialidadMedico(especialidad);
                        hcAdmin.crearMaestroDetalle(cexHorTem, (UsuarioAdmin) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user"));
                        isBtnGrabar = false;
                        isBtnActivo = true;
                    } else {
                        hcAdmin.modificarMaestroDetalle(cexHorTem, (UsuarioAdmin) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user"));
                        isBtnGrabar = true;
                        isBtnActivo = true;
                    }
//////////////                    }
                    cont++;
                }

////////                if (act) {
                FacesContext.getCurrentInstance().addMessage(findComponent(context.getViewRoot(), "formDatos").getClientId(), new FacesMessage(bundle.getString("msg.grabar")));
                cargarListaHorario();
//////////                }
            } else {
                //En el caso de contrario de ser una modificacion general
                List<CexHorario> listaHorTemp = adminObject.listar(CexHorario.class, "cexEspecialidadMedico.admMedico.ameEstado", 1);
                for (Iterator<CexHorario> it = listaHorTemp.iterator(); it.hasNext();) {
                    CexHorario cexHorarioTemp = it.next();
                    cexHorarioTemp.setChoPorcentajeAgenda(porcentajeGen);
                    adminObject.modificar(cexHorarioTemp, (UsuarioAdmin) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user"));
                }
                FacesContext.getCurrentInstance().addMessage(findComponent(context.getViewRoot(), "formDatos").getClientId(), new FacesMessage(bundle.getString("msg.actualizar")));
            }

        } catch (Exception e) {
            log.error("grabarAction() {} ", e.getMessage());
            FacesContext.getCurrentInstance().addMessage(findComponent(context.getViewRoot(), "formDatos").getClientId(), new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
        }

        return null;
    }

    /**
     * Modifica los porcentajes en las agendas creadas que esten en blanco .
     */
    public void modificarporcentajes() {
        String nombreMetodo = Thread.currentThread().getStackTrace()[1].getMethodName() + "()";
        try {

            Date fechaActual = adminObject.getFechaDb();
            Calendar c1 = Calendar.getInstance();
            c1.setTime(fechaActual);
            List<CexAgenda> listaAg = new ArrayList<>();
            //Recorre la lista de horarios dias del objeto horario para listar las agendas de cada horario dia
            for (CexHorariosDia cexHd : object.getCexHorariosDiaList()) {
                //saca la fecha mayor de ese horario dia para saber hasta donde avanzar
                Date fechaMayor = hcAdmin.getMax(CexAgenda.class, "cagFecha", "cexHorariosDia", cexHd);
                //hacer hasta que la fecha sea menor a la fecha maxima
                if (fechaMayor == null) {
                    continue;
                } else {
//                    if (c1.getTime().after(fechaMayor.)) {
//                        continue;
//                    }
                }

                //listar las agendas mayores a la fecha actual de acuerdo con el horario dia
                List<CexAgenda> listaAgetemp = hcAdmin.listarOpLogicoParamOrdenada(CexAgenda.class, "cexHorariosDia", cexHd, "cagFecha", ">=", fechaActual, "cagFecha", true);

                // recorrer la lista para llenar de acuerdo a la fecha asignada
                for (CexAgenda cexAgeTemp : listaAgetemp) {
                    //verifica si es igual a la fecha actual y añade a la lista temporal
                    if (cexAgeTemp.getCagFecha().equals(c1.getTime())) {
                        listaAg.add(cexAgeTemp);
                    }
                }
                //recorrer la lista para saber el tipo de cada registro de la agenda
                for (CexAgenda cexnuevaAge : listaAg) {
                    //comprar que tipo de estadoe s el objeto 
                    if (cexnuevaAge.getCagTipo() == 1) {
                        //Si tiene por lo menos 1 registro con tipo 1 se limpia la lista y no se hace el procedimiento
                        listaAg.clear();
                        break;
                    }
                }
                //Comprueba si la lista son todos los registros tipo 0
                if (!listaAg.isEmpty() || listaAg.size() > 0) {
                    BigDecimal total = divisionControlada(new BigDecimal(cexHd.getChdNumConsultas() * object.getChoPorcentajeAgenda()), new BigDecimal(100)).setScale(0, RoundingMode.UP);
                    //recorrer la lista de nuevo para actualizaqr los tipos a 1 que es para la agenda del medico
                    for (int i = 0; i < total.intValue() - 1; i++) {
                        listaAg.get(i).setCagTipo(1);

                    }
                    hcAdmin.grabarListas(CexHorariosDia.class, listaAg, (UsuarioAdmin) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user"));
                }

                //Sumo un dia a la fecha actual
                c1.add(Calendar.DATE, 1);
            }
        } catch (Exception e) {
            log.error(nombreMetodo, e);
        }
    }

    /**
     * Funcion que divide dos numero BigDecimales en el caso de que el resultado
     * sea mas extenso de lo que este puede abarcar en la expecion lo divide
     * como double
     *
     * @param A
     * @param B
     * @return BigDecimal,
     */
    public static BigDecimal divisionControlada(BigDecimal A, BigDecimal B) {
        try {
            return A.divide(B);
        } catch (Exception e) {
            return new BigDecimal(A.doubleValue() / B.doubleValue());
        }
    }

    /**
     * Carga la lista de objetos en una lista de la página.
     */
    @Override
    public void cargarLista() {
    }

    /**
     * Crea un horario a cada medico por especialidad caso contrario carga la
     * lista de objetos en una lista de la página
     *
     */
    public void cargarListaHorario() {
        FacesContext context = FacesContext.getCurrentInstance();
        String nombreMetodo = Thread.currentThread().getStackTrace()[1].getMethodName() + "()";
        if (admin == null) {
            listaHorarioDia = null;
            return;
        }
        try {
            // Act == 0 cuando se carga la lista de los horarioos desde la base de datsos
            //Recupera la lista de los horarios por dia
            listaHorario = adminObject.listarOrdenada(CexHorario.class, "cexEspecialidadMedico", especialidad, "admTipoConsulta", admTipoConsulta, "choId", true);
            if (!listaHorario.isEmpty() || listaHorario.size() > 0) {
                porcentajeAgenda = listaHorario.get(0).getChoPorcentajeAgenda();
                isBtnGrabar = true;
            } else {
                isBtnGrabar = false;
            }
        } catch (Exception e) {
            log.error(nombreMetodo, e);
        }
    }

    /**
     * Agrega un horario a cada medico por especialidad caso contrario carga la
     * lista de objetos en una lista de la página
     *
     */
    public void agregarHorario() {
        FacesContext context = FacesContext.getCurrentInstance();
        String nombreMetodo = Thread.currentThread().getStackTrace()[1].getMethodName() + "()";
        if (admin == null) {
            listaHorarioDia = null;
            return;
        }
        try {
            //Asignar intervalos a los registros en cero
            for (CexHorariosDia obj : listaHorarioDiaPop) {

                if (obj.getChdIntervalo() == 0) {
                    obj.setChdIntervalo(1);
                }
            }
            cexHorario.setCexHorariosDiaList(listaHorarioDiaPop);
            cexHorario.setChoOrden(listaHorario.size() + 1);
            listaHorario.add(cexHorario);
            FacesContext.getCurrentInstance().addMessage(findComponent(context.getViewRoot(), "formDatos").getClientId(), new FacesMessage(bundle.getString("msg.agregar.horario")));
            isBtnActivo = false;
            //cargarNuevoHorario();

        } catch (Exception e) {
            log.error(nombreMetodo, e);
        }
    }

    /**
     * Modifica la fecha inicio y fin de este horario lista de objetos en una
     * lista de la página
     *
     */
    public void agregarFecha() {
        FacesContext context = FacesContext.getCurrentInstance();
        String nombreMetodo = Thread.currentThread().getStackTrace()[1].getMethodName() + "()";
        try {
            objHor.setChoFechaInicio(fechaInicio);
            objHor.setChoFechaFin(fechaFin);
            adminObject.modificar(objHor, (UsuarioAdmin) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user"));
            FacesContext.getCurrentInstance().addMessage(findComponent(context.getViewRoot(), "formDatos").getClientId(), new FacesMessage(bundle.getString("msg.actualizar")));
            objHor = new CexHorario();
        } catch (Exception e) {
            log.error(nombreMetodo, e);
        }
    }

    /**
     * Crea un horario a cada medico por especialidad caso contrario carga la
     * lista de objetos en una lista de la página
     *
     */
    public void cargarNuevoHorario() {
        String nombreMetodo = Thread.currentThread().getStackTrace()[1].getMethodName() + "()";
        if (admin == null) {
            listaHorarioDiaPop = null;
            return;
        }
        try {
            isBtnActivo = true;
            listaHorarioDiaPop.clear();
            cexHorario = new CexHorario();
            CexHorariosDia diagnosticoMedico = new CexHorariosDia();
            for (int i = 1; i <= 7; i++) {
                if (i == 1) {
                    diagnosticoMedico.setCexDia(domingo);
                    listaHorarioDiaPop.add(diagnosticoMedico);
                    diagnosticoMedico = new CexHorariosDia();
                    continue;
                }
                if (i == 2) {
                    diagnosticoMedico.setCexDia(lunes);
                    listaHorarioDiaPop.add(diagnosticoMedico);
                    diagnosticoMedico = new CexHorariosDia();
                    continue;
                }
                if (i == 3) {
                    diagnosticoMedico.setCexDia(martes);
                    listaHorarioDiaPop.add(diagnosticoMedico);
                    diagnosticoMedico = new CexHorariosDia();
                    continue;
                }
                if (i == 4) {
                    diagnosticoMedico.setCexDia(miercoles);
                    listaHorarioDiaPop.add(diagnosticoMedico);
                    diagnosticoMedico = new CexHorariosDia();
                    continue;
                }
                if (i == 5) {
                    diagnosticoMedico.setCexDia(jueves);
                    listaHorarioDiaPop.add(diagnosticoMedico);
                    diagnosticoMedico = new CexHorariosDia();
                    continue;
                }
                if (i == 6) {
                    diagnosticoMedico.setCexDia(viernes);
                    listaHorarioDiaPop.add(diagnosticoMedico);
                    diagnosticoMedico = new CexHorariosDia();
                    continue;
                }
                if (i == 7) {
                    diagnosticoMedico.setCexDia(sabado);
                    listaHorarioDiaPop.add(diagnosticoMedico);
                    diagnosticoMedico = new CexHorariosDia();
                }

            }
        } catch (Exception e) {
            log.error(nombreMetodo, e);
        }
    }

    /**
     * Carga la lista que viene como parametro lista de objetos en una lista de
     * la página Dia
     *
     * @param horario
     */
    public void cargarSubLista(CexHorario horario) {
        String nombreMetodo = Thread.currentThread().getStackTrace()[1].getMethodName() + "()";
        try {
            objHor = horario;
        } catch (Exception e) {
            log.error(nombreMetodo, e);
        }
    }

    /**
     * Graba un nuevo horario lista de objetos en una lista de la página
     *
     */
    /**
     * Obtiene una lista de objetos de tipo SelectedItem de las especialidades
     * que posee un medico.
     *
     * @return la lista
     */
    public List<SelectItem> getSelectedItemSubespecialidades() {
        try {

            List<CexEspecialidadMedico> listaEspecialidadMedico = adminObject.listar(CexEspecialidadMedico.class, "admMedico.ameId", medId);
            List<SelectItem> items = new ArrayList<>();
            for (CexEspecialidadMedico obj : listaEspecialidadMedico) {
                items.add(new SelectItem(obj, obj.getCexEspecialidad().getCesNombre()));
            }
            return items;
        } catch (Exception e) {
            log.error("getSelectedItemSubespecialidades() {} ", e.getMessage());
        }
        return null;
    }

    /**
     * Asigna el ojbetod e tipo medico a el objeto de tipo medico del jsf
     * Horario.
     *
     * @param id
     */
    public void asignarMedico(Integer id) {
        try {
            medId = id;
            admTipoConsulta = new AdmTipoConsulta();
            especialidad = new CexEspecialidadMedico();
        } catch (Exception e) {
            log.error("asignarMedico() {} ", e.getMessage());
        }

    }

    /**
     * Inicializa el objeto de tipo especialidad Horario.
     *
     */
    public void inicializarEspecialidad() {
        try {
            especialidad = new CexEspecialidadMedico();
        } catch (Exception e) {
            log.error("inicializarEspecialidad() {} ", e.getMessage());
        }
    }

    /**
     * Envia una lista para generar el reporte de los horarios para cada medicos
     *
     *
     */
    public void imprimirHorarioMedico() {
        if (object == null) {
            return;
        }
        String rpt = null;
        try {
            hcAdmin.generarReporte(lista, NAME_REPORTE, TIPO_REPORTE_PDF, "horario_medico");
        } catch (Exception e) {
            log.error("imprimirRecepcionHc(...) " + e);
        }

    }

    /**
     * Obtiene una lista de objetos de tipo SelectedItem.
     *
     * @return la lista
     */
    @Override
    public List<SelectItem> getSelectedItem() {
//        try {
//            List<HcHorarios> datos = admin.listarOrdenada(object.getClass(), "nombre", true);
//            List<SelectItem> items = new ArrayList<SelectItem>();
//            for (HcHorarios obj : datos) {
//                items.add(new SelectItem(obj, obj.getNombre()));
//            }
//            return items;
//        } catch (Exception e) {
//            log.error("getSelectedItem() {} ", e.getMessage());
//        }
        return null;
    }

    @Override
    public DataModel<CexHorario> getDataModel() {
        return null;
    }

    public CexEspecialidadMedico getEspecialidad() {
        return especialidad;
    }

    public void setEspecialidad(CexEspecialidadMedico especialidad) {
        this.especialidad = especialidad;
    }

    public AdmMedico getAdmMedico() {
        return cexMedico;
    }

    public void setAdmMedico(AdmMedico cexMedico) {
        this.cexMedico = cexMedico;
    }

    public Integer getPorcentajeAgenda() {
        return porcentajeAgenda;
    }

    public void setPorcentajeAgenda(Integer porcentajeAgenda) {
        this.porcentajeAgenda = porcentajeAgenda;
    }

    public Integer getMedId() {
        return medId;
    }

    public CexHorario getCexHorario() {
        return cexHorario;
    }

    public void setCexHorario(CexHorario cexHorario) {
        this.cexHorario = cexHorario;
    }

    public void setMedId(Integer medId) {
        this.medId = medId;
    }

    public List<CexHorariosDia> getListaHorarioDia() {
        return listaHorarioDia;
    }

    public void setListaHorarioDia(List<CexHorariosDia> listaHorarioDia) {
        this.listaHorarioDia = listaHorarioDia;
    }

    public Integer getTipoHorario() {
        return tipoHorario;
    }

    public void setTipoHorario(Integer tipoHorario) {
        this.tipoHorario = tipoHorario;
    }

    public Integer getPorcentajeGen() {
        return porcentajeGen;
    }

    public void setPorcentajeGen(Integer porcentajeGen) {
        this.porcentajeGen = porcentajeGen;
    }

    public List<CexHorario> getListaHorario() {
        return listaHorario;
    }

    public void setListaHorario(List<CexHorario> listaHorario) {
        this.listaHorario = listaHorario;
    }

    public List<CexHorariosDia> getListaHorarioDiaPop() {
        return listaHorarioDiaPop;
    }

    public void setListaHorarioDiaPop(List<CexHorariosDia> listaHorarioDiaPop) {
        this.listaHorarioDiaPop = listaHorarioDiaPop;
    }

    public boolean isIsBtnActivo() {
        return isBtnActivo;
    }

    public void setIsBtnActivo(boolean isBtnActivo) {
        this.isBtnActivo = isBtnActivo;
    }

    public AdmTipoConsulta getAdmTipoConsulta() {
        return admTipoConsulta;
    }

    public void setAdmTipoConsulta(AdmTipoConsulta admTipoConsulta) {
        this.admTipoConsulta = admTipoConsulta;
    }

    public boolean isIsBtnGrabar() {
        return isBtnGrabar;
    }

    public void setIsBtnGrabar(boolean isBtnGrabar) {
        this.isBtnGrabar = isBtnGrabar;
    }

    public Date getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    @Override
    protected ResourceBundle getProperties() {
        return ResourceBundle.getBundle("aplicacion");
    }
}
